<?php
class AdateModelClass extends LinkModelClass {
	const GuestDbUser = 'pts80_00'; //数据库用户名 全局只读账户
	const GuestDbPassword = 'pts80com80808'; //数据库密码
	
	/**
	 * 构造函数
	 * 链接数据库
	 * @access public
	 * @return object
	 */
	public function __construct(){
		$this->link = $this->getConnect(self::GuestDbUser,self::GuestDbPassword);
	}

	/**
	 * 发送一条sql语句，返回结果
	 * @access public
	 * @param string $sql 语句
	 * @return mixed
	 */
	public function query($sql,$link=''){
		if($link=='')$link = $this->link;
		return mysqli_query($link, $sql);
	}
	
	/**
	 * 添加
	 * @access public
	 * @param array array 插入的字段，键值对数组
	 * @param string table 插入的表
	 * @param string link 数据库链接对象
	 * @return integer id || array ids;
	 */
	public function insert($array,$table,$link=''){
		if($array=='' || $table==''){return 0;}
		$text1='';
		$text2='';
		$text_temp='';
		$val_is_array = false;
		foreach($array as $key=>$val){
			if(is_array($val)){
				$val_is_array=true;
			}
		}
		
		if(!$val_is_array){
			if($this->autoFilter)$obj = $this->filter($array);//自动过滤
			if($this->autoValid)$obj = $this->validator($array);//自动效验
			unset($obj);
		}
		
		foreach($array as $key=>$val){
			if(is_array($val)){
				$text_temp='';
				//$val_is_array=true;
				if($this->autoFilter)$obj = $this->filter($val);//自动过滤
				if($this->autoValid)$obj = $this->validator($array);//自动效验
				unset($obj);
				foreach ($val as $k=>$v){
					if($key==0){
						$text1.=',`'.$k.'`';
					}
					$text_temp.=",'$v'";
				}
				$text2.=',('.trim($text_temp,',').')';
				
			}else{
				
				$text1.=',`'.$key.'`';
				$text2.=",'$val'";
			}
		}
		
		$text1=trim($text1,',');
		$text2=trim($text2,',');
		if(!$val_is_array)$text2='('.$text2.')';
		
		if(!$text1){
			if(self::Tracy){
				$this->dbError = '所有传入字段被过滤。';
				throw new Exception($this->dbError);
			}else{
				return 0;
			}
		}
		
		$sql = "insert into `$table` ($text1) values $text2";
		$res = $this->query($sql,$link);
		if($res){
			$insert_id = mysqli_insert_id($link);
			if($val_is_array){//批量插入数据时，搜索新插入的id，返回一维数组
				$where = '1 and id>='.$insert_id;
				$order = 'id asc';
				$res_ls = self::selectList('id', $table, $where, $order);
				$ids = array();
				foreach ($res_ls['list'] as $v_arr){
					$ids[] = $v_arr['id'];
				}
				return $ids;
			}
			return $insert_id;
		}else{
			if(self::Tracy){
				$this->dbError = '发生错误： '.mysqli_error().'<br>sql命令： '.$sql;
				throw new Exception($this->dbError);
			}else{
				return 0;
			}
		}
	}
	
	/**
	 * 修改
	 * @access public
	 * @param array array 修改的字段，键值对数组
	 * @param string table 修改的表
	 * @param string where 查询条件
	 * @param string link 数据库链接对象
	 * @return integer 成功返回1，失败返回0;
	 */
	public function update($array,$table,$where,$link=''){
		if($array=='' || $table=='' || $where==''){return 0;}
		if($this->autoFilter)$obj = $this->filter($array);//自动过滤
		if($this->autoValid){
			if(!$this->validator($array))return 0;//自动效验
		}
		$text='';
		foreach($array as $key=>$val){
			$text.=',`'.$key.'`='."'$val'";
		}
		$text = trim($text,',');
		if(!$text){
			if(self::Tracy){
				$this->dbError = '所有传入字段被过滤。';
				throw new Exception($this->dbError);
			}else{
				return 0;
			}
		}
		$res = $this->query("update `$table` set $text where $where",$link);
		if($res){
			return 1;
		}else{
			if(self::Tracy){
				$this->dbError = '发生错误： '.mysqli_error().
				'<br>sql命令： '."update `$table` set $text where $where";
				throw new Exception($this->dbError);
			}else{
				return 0;
			}
		}
	}
	

	/**
	 * 单行查询
	 * @access public
	 * @param string fields 查询的字段
	 * @param string table 查询的表
	 * @param string where 查询条件
	 * @param string link 数据库链接对象
	 * @return mixed
	 */
	public function select($field,$table,$where='',$link=''){
		$sql_str="select $field from `$table`";
		$where!='' ? $sql_str.=" where $where" : null;
		$res=$this->query($sql_str,$link);
	
		if($res){
			if(strpos($field,',') || $field==='*'){
				return mysqli_fetch_array($res,MYSQL_ASSOC);
			}else{
				$v=mysqli_fetch_array($res);
				return $v[$field];
			}
		}else{
			$this->dbError = '发生错误： '.mysqli_error().'<br/>sql命令： '.$sql_str;
			if(self::Tracy){
				throw new Exception($this->dbError);
			}
			return 0;
		}
	}
	
	/**
	 * 多行查询
	 * @access public
	 * @param string fields 查询的字段
	 * @param string table 查询的表
	 * @param string where 查询条件
	 * @param string order 排序
	 * @param string limit 限界
	 * @param string link 数据库链接对象
	 * @return array
	 */
	public function selectList($field,$table,$where='',$order='',$limit='',$link=''){
		$sql_str="select $field from `$table`";
		$where!='' ? $sql_str.=" where $where" : null;
		$res=$this->query($sql_str,$link);
		$v = array (
				'num' => mysqli_num_rows($this->query ($sql_str,$link)),
				'list' => array ()
		);
		$order!='' ? $sql_str.=" order by $order" : null;
		$limit!='' ? $sql_str.=" limit $limit" : null;
		$res = $this->query($sql_str);
		if($res){
			while($one_row = mysqli_fetch_array($res, MYSQL_ASSOC )){
				$v["list"][] = $one_row;
			}
		}else{
			if(self::Tracy){
				$this->dbError = 'sql命令：'.$sql_str;
				throw new Exception($this->dbError);
			}
		}
		if(self::Tracy){
			$v ['sql'] = $sql_str;//返回sql;
		}
		return $v;
	}

}